// //封装请求库
// //引入一个实例
// import axios from "axios"
//
//
// const defaultConfig = {
//     timeout:5000,
//     baseUrl:''
// }
// const axiosInstance = axios.create(defaultConfig)
// //请求拦截
// axiosInstance.interceptors.request.use(config=>{
//     return config
// },err => {
//     return Promise.reject(err)
//     })
// //响应拦截
// axiosInstance.interceptors.response.use(config=>{
//     return config
// },err => {
//     return Promise.reject(err)
// })
// //封装请求
// //get 定义完还要暴露出去 因为我们还要基于这两个get和post请求封装后端的接口
// function httpRequestGet (url,params){
//     return axiosInstance.get(url,params).then(res=>res.data).catch()
// }
// //post
// function httpRequestPost (url,params){
//     return axiosInstance.post(url,params).then(res=>res.data).catch()
// }
//
// export default {
//     httpRequestGet,
//     httpRequestPost
// }


//封装请求库
//1 引入一个实例
import axios, {AxiosRequestConfig,AxiosResponse} from 'axios'
const defaultConfig = {
    timeout:5000,
    baseURL:import.meta.env.PROD ? 'http://110.42.184.111':'http://localhost:3000/release'
}
// const axiosInstance = axios.create(defaultConfig)
//用class封装请求库 用class可以帮我们分清哪些是公有的 哪些是私有的 更方便对请求库后面的维护
class Http{
    constructor() {
        this.httpInterceptorsRequest()
        this.httpInterceptorsResponse()
    }
    private static axiosInstance = axios.create(defaultConfig)
    //2-1 请求拦截
    private httpInterceptorsRequest(){
        Http.axiosInstance.interceptors.request.use((config:AxiosRequestConfig)=>{//将请求方法也都添加好了泛型
            return config
        },err => {
            return Promise.reject(err)
        })
    }
    private httpInterceptorsResponse(){
        //2-2 响应拦截
        Http.axiosInstance.interceptors.response.use((response:AxiosResponse)=>{
            return response
        },err => {
            return Promise.reject(err)
        })
    }
    /*
    * 3 封装请求
    * */
    public httpRequestGet<T>(url:string,params:AxiosRequestConfig):Promise<T>{
        return Http.axiosInstance.get(url,{params}).then(res=>res.data).catch()
    }
    public httpRequestPost<T>(url:string,params:AxiosRequestConfig):Promise<T>{
        return Http.axiosInstance.post(url,params).then(res=>res.data).catch()
    }
}
//这里是将类暴露出去 用实例的方式暴露出去
export const http = new Http()

